package com.kuqi.crs.web.Listener;

import com.kuqi.crs.settings.domain.DicValue;
import com.kuqi.crs.settings.service.DicService;
import com.kuqi.crs.settings.service.impl.DicServiceImpl;
import com.kuqi.crs.util.ServiceFactory;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.List;
import java.util.Map;

/**
 * @author:kuqi
 * @createTime:2021/10/7 14:20
 * @description:上下文域的监听器
 */

@WebListener(value = "/com/kuqi/crs/web/Listener/DicListener")
public class DicListener implements ServletContextListener {
    /**
     * 服务器创建时执行下面的方法
     * @param event
     */
    public void contextInitialized(ServletContextEvent event) {
        //获取上下文对象(全局作用域)
        ServletContext application = event.getServletContext();

        //创建service对象
        DicService dicService = (DicService) ServiceFactory.getService(new DicServiceImpl());

        //调用业务层对象的方法，获取数据字典
        /**
         * 业务层的数据应该使用map来打包的
         * key为dicType的单个类型(name)，value为该单个类型对应的dicValue的值的集合(nameList)
         * map.put("state",nameList)
         */
        Map<String, List<DicValue>> map = dicService.getAll();

        //将map中的数据，解析成上下文域对象中的键值对;最终达到数据字典存储到上下文作用域中
        for(String key:map.keySet()){
            application.setAttribute(key,map.get(key));
        }

        System.out.println("服务器缓存数据字典结束");
    }
}
